package io.dy.task;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * @author dmj
 * @date 2024年03月02日 下午8:23
 * 模拟并行执行耗时任务
 */
public class ParallelStreamDemo {

    public static void main(String[] args) {

        List<MockTask> taskList = IntStream.range(0, 10).mapToObj(i -> new MockTask(1)).collect(Collectors.toList());

        long startTime = System.currentTimeMillis();
        List<Integer> time = taskList.parallelStream().map(MockTask::doWork).collect(Collectors.toList());
        long endTime = System.currentTimeMillis();

        System.out.printf("processes %d task cost %.2f s", time.size(), (endTime - startTime)/1000.0);

        /**
         * parallelStream 流 默认用的线程池 ForkJoinPool.commonPool-worker 该线程池与计算机的CPU有关 比如 4核 8线程 线程池的线程数就是8
         *
         * 并行流的弊端是无法自定义指定线程池大小
         */
    }
}
